package grammer;

public class Outer {
    public int a=10;
    public static int b=20;
    private int c;
    static{
        System.out.println("外部类静态代码块");
    }
    {
        System.out.println("外部类构造代码块");
    }
    public Outer(){
        System.out.println("我是外部类构造函数");
    }
    public void go(){
        Outer.Inner oin=new Outer.Inner();
        Inner inner=new Inner();
//        System.out.println(ina);外部类不能访问普通内部类的成员变量和方法，只能通过创建内部类对象来访问
        System.out.println();

    }
    public static void test(){
//        a=20;静态方法不能访问非静态变量


    }
    class Inner{
        public int ina=10;
//        public static int b=20;普通内部类不可以声明静态变量
        private int inc;
        /*static{
            System.out.println("外部类静态代码块");//不能声明静态代码块
        }*/
        {
            System.out.println("普通内部类构造代码块");

        }
        public Inner(){
            System.out.println("我是普通内部类构造函数");
        }
        public void ingo(){
            go();//可以随意访问外部类的变量和方法，无论是静态还是非静态
            test();
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
        }
        /*public static void test(){  不能声明静态方法
        }*/

    }

    static class SInner{
        public int sa=10;
        public static int sb=20;
        private int sc;
        static{
            System.out.println("静态内部类类静态代码块");

            System.out.println(b);//随意访问外部类静态方法和变量
            test();
            Outer.test();
//            System.out.println(a);
        }
        {
            System.out.println("静态内部类构造代码块");

        }
        public SInner(){
            System.out.println("我是静态内部类构造函数");
        }
        public void sgo(){
//            a=100;
            b=100;


        }
        public static void stest(){
//        a=20;静态方法不能访问非静态变量
            b=100;




        }

    }
}
